/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejb;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import jpa.CredenzialiResponsabile;
import jpa.Responsabile;

/**
 *
 * @author admin
 */
@Stateless
public class GestoreAmministratore implements GestoreAmministratoreLocal {

    @PersistenceContext
    private EntityManager em;

    public Responsabile login(String user, String pass) {
        CredenzialiResponsabile cr = em.find(CredenzialiResponsabile.class, user);
        if(cr != null){
           String hashword = null;
           try {
               MessageDigest md5 = MessageDigest.getInstance("MD5");
               md5.update(pass.getBytes());
               BigInteger hash = new BigInteger(1, md5.digest());
               hashword = hash.toString(16);
           }catch (NoSuchAlgorithmException nsae) {
                // ignore
           }
           if(cr.getPassword().equals(hashword)){
               Responsabile r= em.find(Responsabile.class, cr.getResponsabileid());
               return r;
           }
        }
        return null;
    }

    public boolean registra(CredenzialiResponsabile cr, Responsabile r) {
        CredenzialiResponsabile c = em.find(CredenzialiResponsabile.class, cr.getUsername());
        if(c != null) {
            return false;
        }
        em.persist(r);
        em.flush();
        cr.setResponsabileid(r.getId());
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(cr.getPassword().getBytes());
            BigInteger hash = new BigInteger(1, md5.digest());
            cr.setPassword(hash.toString(16));
        }catch (NoSuchAlgorithmException nsae) {
                // ignore
        }
        em.persist(cr);
        return true;
    }

    public List<Responsabile> listaResponsabile() {
        Query query = em.createNamedQuery("Responsabile.findAll");
        return query.getResultList();
    }

    public boolean modifica(Responsabile t) {
        Responsabile c = getResponsabile(t.getId());
        if(c != null){
            em.merge(t);
            em.flush();
            return true;
        }
        return false;
    }

    public Responsabile getResponsabile(Integer id) {
        return em.find(Responsabile.class, id);
    }

    public boolean elimina(Integer Id) {
        Responsabile t = getResponsabile(Id);
        CredenzialiResponsabile ct = getCredenzialiResponsabile(Id);
        if(t==null||ct==null) {
            return false;
        }
        em.remove(ct);
        em.flush();
        em.remove(t);
        em.flush();
        return true;
    }

    public CredenzialiResponsabile controllaUsername(CredenzialiResponsabile ct) {
        return em.find(CredenzialiResponsabile.class, ct.getUsername());
    }

    public CredenzialiResponsabile getCredenzialiResponsabile(Integer adminId) {
        Query query = em.createNamedQuery("CredenzialiResponsabile.findByResponsabileid");
        query.setParameter("responsabileid", adminId);
        CredenzialiResponsabile t = (CredenzialiResponsabile) query.getResultList().get(0);
        return t;
    }
}
